/*
 * Copyright 2008 Alberto Gimeno <gimenete at gmail.com>
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */
package siena.jdbc.test.test8;

import java.util.Date;

import siena.Column;
import siena.Generator;
import siena.Id;
import siena.Json;
import siena.Model;
import siena.Query;
import siena.Table;

@Table("messages")
public class Message extends Model {

	@Id(Generator.UUID)
	public String uuid;
	public Json data;
	
	@Column("creation_date")
	public Date creationDate;

	public Message() {
	}

	public Message(String uuid, Json data) {
		this.uuid = uuid;
		this.data = data;
	}

	public static Message get(String uuid) {
		Message p = new Message();
		p.uuid = uuid;
		p.get();
		return p;
	}

	public static Query<Message> all() {
		return Model.all(Message.class);
	}
	
	@Override
	public void insert() {
		creationDate = new Date();
		super.insert();
	}
	
	public String toString() {
		return "uuid: "+uuid+", data: "+data;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((data == null) ? 0 : data.hashCode());
		result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Message other = (Message) obj;
		if (data == null) {
			if (other.data != null)
				return false;
		} else if (!data.equals(other.data))
			return false;
		if (uuid == null) {
			if (other.uuid != null)
				return false;
		} else if (!uuid.equals(other.uuid))
			return false;
		return true;
	}

}
